import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import { getCookie } from '@/utils/cookie'
// 获取原型对象push函数
const originalPush = VueRouter.prototype.push
// 获取原型对象replace函数
const originalReplace = VueRouter.prototype.replace
// 修改原型对象中的push函数
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
// 修改原型对象中的replace函数
VueRouter.prototype.replace = function replace(location) {
  return originalReplace.call(this, location).catch(err => err)
}

// 注册路由
Vue.use(VueRouter)
// 实例化路由
const router = new VueRouter({
  routes: routes,
  mode: 'hash',
  // 切换页面回退原点
  scrollBehavior(to, from, savePosition) {
    if (savePosition) {
      return savePosition
    }
    return { x: 0, y: 0 }
  }
})
// 设置路由前置守卫及白名单
const whiteList = ['/login']
router.beforeEach((to, from, next) => {
  // 获取token
  let token = getCookie('_token');
  // 检测是否白名单
  if (whiteList.indexOf(to.path) != -1) {
    // 如果是白名单
    next()
  } else {
    // 进行token检测
    if (!token) {
      next({
        // 如果没有token，终止当前路由 跳转登录界面，跳转登录时  知道那个路由到登录的  哪么登录完成之后在回到原路由
        path: '/login',
        query: { redirect: to.path }
      })
    } else {
      // 有token放行
      console.log(
        {
          path: to.path,
          name: to.meta
        }

      );
      next()
    }
  }
})

export default router
